package com.wyw.design.model.learning.structure.decorators;

/**
 * @Title       媒体抽象类
 * @Description 用于模拟多媒体播放功能（Component 抽象构件角色）
 *              抽象构件（Component ）：Component 是一个接口或者抽象类，也是最原始的对象，属于模式核心角色。用于定义一些抽象的接口或功能，以便后面的 ConcreteComponent 和 ConcreteDecorator 角色去实现；
 * @Author Mr Wu yewen.wu.china@gmail.com
 * @Date 2023/3/29 10:53
 * Update History:
 * Author        Time            Content
 */
public abstract class MediaPlay {

    public abstract String getMediaName(); // 获取要播放的媒体文件名称

    public abstract int getMediaSeconds(); // 获取要播放的媒体文件的播放时长（s）

    public abstract String getMediaContent(); // 获取需要播放的媒体文件内容

    // 模拟媒体播放
    public final void play() {
        System.out.println("Media：" + getMediaName() + "(累计时长：" + getMediaSeconds() + " 秒) 正在播放");
        try {
            for (int i = 1; i <= getMediaSeconds(); i++) {
                Thread.sleep(1000);
                System.out.println("当前播放第 " + i + " 秒，" + getMediaContent() + "...");
            }
        }catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}